package com.huike.web.controller.review;


import com.github.pagehelper.Page;
import com.huike.common.core.controller.BaseController;
import com.huike.common.core.domain.AjaxResult;
import com.huike.common.core.page.TableDataInfo;
import com.huike.common.exception.CustomException;
import com.huike.common.utils.StringUtils;
import com.huike.review.pojo.Review;
import com.huike.review.service.ReviewService;
import com.huike.review.vo.MybatisReviewVO;
import com.sun.org.apache.regexp.internal.RE;
import org.apache.ibatis.annotations.Update;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 该Controller主要是为了复习三层架构以及Mybatis使用的，该部分接口已经放开权限，可以直接访问
 * 同学们在此处编写接口通过浏览器访问看是否能完成最简单的增删改查
 */

@RestController
@RequestMapping("/review")
public class MybatisReviewController extends BaseController {

    @Autowired
    private ReviewService reviewService;

    /**
     * =========================================================新增数据============================================
     */

   /* 新增接口1：
    接口名：
            /review/saveData/吴思远/18/男
    请求方式：
    GET请求
    传入参数：
    接口路径上传值/review/saveData/{name}/{age}/{sex}
    返回值：
    {
        "msg": "成功插入:1条数据",
            "code": 200
    }*/
 /*   @GetMapping("/saveData/{name}/{age}/{sex}")
    public AjaxResult save(Review review) {
        try {
            reviewService.save(review);
            return AjaxResult.success("添加成功");
        } catch (Exception e) {
            throw new CustomException("添加失败");
        }
    }*/
    @GetMapping("/saveData/{name}/{age}/{sex}")
    public AjaxResult save(@PathVariable String name,@PathVariable Integer age,@PathVariable String sex) {
        try {
            reviewService.save1(name,age,sex);
            return AjaxResult.success("添加成功");
        } catch (Exception e) {
            throw new CustomException("添加失败");
        }
    }

    /*    新增接口2：
        接口名：
                /review/saveData
        请求方式：
        POST请求
        传入参数：
        {
            "name":"吴思敏",
                "age":18,
                "sex":"女"
        }
        返回值：*/
   /* {
        "msg": "成功插入:1条数据",
            "code": 200
    }*/
    @PostMapping("/saveData")
    public AjaxResult saveDate(@RequestBody MybatisReviewVO reviewVO) {
        try {


            reviewService.saveDate(reviewVO);
            return AjaxResult.success("添加成功");
        } catch (Exception e) {
            throw new CustomException("添加失败");
        }
    }

    /**
     * =========================================================删除数据=============================================
     */
  /*  删除接口：
    接口名：
            /review/remove/17
    请求方式：
    DELETE请求
    传入参数：
            /review/remove/{id}
    返回值：
    {
        "msg": "成功删除:1条数据",
            "code": 200
    }*/
    @DeleteMapping("/remove/{id}")
    public AjaxResult deleteById(@PathVariable Long id) {
        try {
            reviewService.deleteById(id);
            return AjaxResult.success("删除成功");
        } catch (Exception e) {
            throw new CustomException("删除失败");
        }
    }

    /**
     * =========================================================修改数据=============================================
     */
 /*   修改接口：
    接口名：
            /review/update
    请求方式：
    POST请求
    传入参数：
    {
        "id":21,
            "name":"吴思鹏",
            "age":18,
            "sex":"男"
    }
    返回值：
    {
        "msg": "修改成功",
            "code": 200
    }*/
    @PostMapping("/update")
    public AjaxResult update(@RequestBody MybatisReviewVO reviewVO) {
        try {
            Review review = new Review();
            BeanUtils.copyProperties(reviewVO,review);
            reviewService.update(review);
            return AjaxResult.success("修改成功");
        } catch (Exception e) {
            throw new CustomException("修改失败");
        }
    }

    /**
     * =========================================================查询数据=============================================
     */
  /*  单条件查询，根据id来查询数据：
    接口名：
            /review/getById?id=1
    请求方式：
    GET请求
    传入参数：
    id
    返回值：
    {
        "msg": "操作成功",
            "code": 200,
            "data": {
        "createBy": "1",
                "createTime": "2022-04-17 18:53:09",
                "updateBy": "1",
                "updateTime": "2022-04-17 18:53:09",
                "id": 1,
                "name": "张三",
                "age": 18,
                "sex": "男"
    }
    }*/
    @GetMapping("/getById")
    public AjaxResult getById(@RequestParam("id") Long id) {
        try {
            Review review = reviewService.getById(id);
            return AjaxResult.success(review);
        } catch (Exception e) {
            throw new CustomException("查询失败");
        }
    }

    /*  接口名：
              /review/getDataByPage?pageNum=1&pageSize=10
      请求方式：
      GET请求
      传入参数：
      pageNum:当前页
      pageSize:每页显示条数
      返回值：
      {
          "total": 16,
              "rows": [
          {
              "createBy": "1",
                  "createTime": "2022-04-17 18:53:09",
                  "updateBy": "1",
                  "updateTime": "2022-04-17 18:53:09",
                  "id": 1,
                  "name": "张三",
                  "age": 18,
                  "sex": "男"
          }...
                        ],
          "code": 200,
              "msg": "查询成功",
              "params": null
      }*/
    @GetMapping("/getDataByPage")
    public TableDataInfo getDataByPage(Review review) {
        try {
            startPage();
            return getDataTable(reviewService.getDataPage(review));
        } catch (Exception e) {
            throw new CustomException("查询失败");
        }

    }



}